


#ifndef WxObjectOrientationMarkerMapper3D_H_HEADER_INCLUDED_C1907273
#define WxObjectOrientationMarkerMapper3D_H_HEADER_INCLUDED_C1907273

#include "mitkCommon.h"
#include "mitkVtkMapper3D.h"
#include "mitkBaseRenderer.h"
#include "WxObjectOrientationMarker.h"

class vtkActor;
class vtkPropAssembly;
class vtkAppendPolyData;
class vtkPolyData;
class vtkPolyDataMapper;


namespace mitk {

  class WxExtention_EXPORT WxObjectOrientationMarkerMapper3D : public VtkMapper3D
  {
  public:
    mitkClassMacro(WxObjectOrientationMarkerMapper3D, VtkMapper3D);

    itkNewMacro(Self);

    virtual const mitk::WxObjectOrientationMarker* GetInput();


    virtual vtkProp* GetVtkProp(mitk::BaseRenderer* renderer);
    virtual void UpdateVtkTransform(mitk::BaseRenderer* renderer);
    static void SetDefaultProperties(mitk::DataNode* node, mitk::BaseRenderer* renderer = NULL, bool overwrite = false);

    void ReleaseGraphicsResources(vtkWindow *renWin);

  protected:
    WxObjectOrientationMarkerMapper3D();

    virtual ~WxObjectOrientationMarkerMapper3D();

    virtual void GenerateData(mitk::BaseRenderer* renderer);
    virtual void ResetMapper( BaseRenderer* renderer );
    virtual void ApplyProperties(vtkActor* /*actor*/, mitk::BaseRenderer* renderer);



    vtkPolyDataMapper *m_ArrowXMapper;
    vtkPolyDataMapper *m_ArrowYMapper;
    vtkPolyDataMapper *m_ArrowZMapper;

    vtkActor *m_ArrowXActor;
    vtkActor *m_ArrowYActor;
    vtkActor *m_ArrowZActor;

    vtkPropAssembly *m_PointsAssembly;
    float m_LineWidth;
    float m_LineLength;

  private:
    bool m_NeedUpdate;
  };


} // namespace mitk

#endif /* WxObjectOrientationMarkerMapper3D_H_HEADER_INCLUDED_C1907273 */

